#include <iostream>
#include <future>

// 异步任务函数，将结果通过 promise 传递
void asyncTask(std::promise<int>& p) {
    std::this_thread::sleep_for(std::chrono::seconds(4)); // 模拟耗时操作
    p.set_value(42); // 设置异步任务的结果
}

int main() {
    // 创建 promise 对象
    std::promise<int> resultPromise;

    // 在主线程执行其他工作
    std::cout << "Start async thread ..." << std::endl;
    // 启动异步任务，并传递 promise 对象
    std::thread(asyncTask, std::ref(resultPromise)).detach();

    // 在主线程执行其他工作
    std::cout << "Main thread is doing some work..." << std::endl;
    

    // 在这里被阻塞，并等待获取异步任务的结果
    std::future<int> result = resultPromise.get_future();
    int asyncResult = result.get();

    // 输出异步任务的结果
    std::cout << "Async task result: " << asyncResult << std::endl;

    return 0;
}